package com.bjxthomework;

import java.io.*;

/**复制目录文件
 * 考虑到文件可能是图片，影音，不只是文本，
 所以用FileInputStream和FileOutputStream
   用BufferedInputStream/ BufferedOutputStream*/
public class CopyDirectoryFile02 {
    public static void main(String[] args) {
        copy("d:/oop","d:/oop2");
    }
    public static void copy(String src,String des){
        /*如果源文件不存在  上面参数是String类型，下面是File类型，要强转*/
        if(! new File(src).exists()){
            System.out.println(src+"文件不存在，无法复制");
            return;
        }else {
            if (new File(src).isDirectory()) {
                copyDir(new File(src), new File(des)); //类型强转
            } else {
                copyFile(new File(src), new File(des));
            }
        }
    }
    //复制目录
    public static void copyDir(File source,File dest){
        if(!dest.exists()){
            dest.mkdir(); //文件夹
        }
        File[] files = source.listFiles();//获取文件夹第一层的内容
        //遍历
        for(File file:files){
            //如果是文件夹，就用递归（自己调自己）
            if(file.isDirectory()){  //File.separator相当于"\”
                copyDir(new File(source+File.separator+file.getName()),new File(dest+File.separator+file.getName()));
            }else {
                //是文件
                copyFile(new File(source+File.separator+file.getName()),new File(dest+File.separator+file.getName()));
            }
        }
    }
    //复制文件
    public static void copyFile(File oldFile,File newFile) {
        if(!oldFile.canRead()){
            System.out.println(oldFile+"源文件不读，无法可以复制");
        }else {
            //定义流
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
            try{
                //分开写：
              /*  fis = new FileInputStream(oldFile);
                bis = new BufferedInputStream(fis);
                fos = new FileOutputStream(newFile);
                bos = new BufferedOutputStream(fos);*/
                //合并写
                bis = new BufferedInputStream(new FileInputStream(oldFile));
                bos = new BufferedOutputStream(new FileOutputStream(newFile));
                int temp=0;
                while ((temp = bis.read()) != -1){  //读完返回-1
                    bos.write(temp);
                }
               bos.flush();
            } catch (Exception e){
                    e.printStackTrace();
            }finally { //后开先关
                try {
                    if(bos != null){
                        bos.close();
                    }
                   /* if(fos != null){
                        fos.close();
                    }*/
                    if(bis != null){
                        bis.close();
                    }
                   /* if(fis != null){
                        fis.close();
                    }*/
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
}
